#include "button.h"

void Button_Init(void)
{
    //1. IOMUX_SW_MUX_CTL_PAD_UART1_CTS_B Address: 0x020E008C
    //   value: bit[4]:0 bit[3:0]:0101 SION:软件输入控制位 0:关闭
    IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18,0);

    //2. IOMUX_SW_PAD_CTL_PAD_UART1_CTS_B Address: 0x020E0318
    //   value: bit[15:12]:1111 bit[11:8]:0000 bit[7:4]:1000 bit[3:0]:0000
    IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0xF080);

    //3. GOIO1->GDIR   Address:0x0209 C004  bit[18]=0;
    GPIO_Config GPIO_InitStruct;
    GPIO_InitStruct.direction=input;
    GPIO_Init(GPIO1,18,&GPIO_InitStruct);
}

/*读取数据寄存器的值*/
int Get_DataRegister(void)
{
    return GPIO_Read(GPIO1,18);
}

/* 按键消抖后获取寄存器中的值 */
int Get_ButtonValue(void)
{
    static int last_status = 1; // 上一次状态
    int curr_status = Get_DataRegister();

    if (curr_status != last_status) // 状态发生变化
    {
        Delay(20); // 消抖
        curr_status = Get_DataRegister();
        if (curr_status != last_status) // 再次确认
        {
            last_status = curr_status;
            if (curr_status == 0)
                return 0; // 按下事件
            else
                return 1; // 松开事件
        }
    }
    return -1; // 无事件
}



